package rmi.item;

import rmi.item.Item;
import rmi.item.exception.ItemInvalidoException;

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
import java.util.List;

import java.rmi.registry.Registry;

import rmi.util.CampoObrigatorioException;
import rmi.util.CriacaoRegistroRMIException;
import rmi.util.ErroAcessoRepositorioException;
import rmi.item.CadastroItem;

public class CadastroItemImp extends UnicastRemoteObject implements
	CadastroItem {

    /**
     * Long gerado automaticamente pelo eclipse.
     */
    private static final long serialVersionUID = 6413891669835781925L;

    private IRepositorioItens itens;

    public CadastroItemImp(IRepositorioItens repItem) throws RemoteException {
	itens = repItem;
    }

    public void alterarItem(Item item) throws ErroAcessoRepositorioException,
	    ItemInvalidoException, RemoteException {
	itens.alterarItem(item);
    }

    public Item consultarItem(int codigo) throws ItemInvalidoException,
	    ErroAcessoRepositorioException, RemoteException {
	return itens.consultarItem(codigo);
    }

    public void excluirItem(int codigo) throws ErroAcessoRepositorioException,
	    ItemInvalidoException, RemoteException {
	itens.excluirItem(codigo);
    }

    public void inserirItem(Item item) throws ErroAcessoRepositorioException,
	    CampoObrigatorioException, RemoteException {
	itens.inserirItem(item);
    }

    public List<Item> listarItens() throws ErroAcessoRepositorioException,
	    RemoteException {
	return itens.listarItens();
    }

    public static void main(String[] args) throws CriacaoRegistroRMIException {
	try {

	    Registry registry = LocateRegistry
		    .createRegistry(Registry.REGISTRY_PORT);

	    IRepositorioItens itens = new RepositorioItensBDR();

	    // Cria registro do cadastro de item no Registry.
	    CadastroItem cadastroItem = new CadastroItemImp(itens);
	    registry.rebind("cadastroItem", cadastroItem);

	} catch (RemoteException e) {
	    throw new CriacaoRegistroRMIException();
	}
    }

}
